15 物理内存管理
物理内存的组织方式
平坦内存模型(Flat Memory Model):每个页有一个结构 struct page 表示,放在 一个数组里面,根据页号通过下标找到相应的 struct page 结构。整个物理内存的布局非常简单、易管理。
SMP(Symmetric multiprocessing),对称多处理器。
NUMA(Non-uniform memory access),非一致内存访问。
节点
- 每一个节点都有自己的 ID:node_id;
- node_mem_map 就是这个节点的 struct page 数组,用于描述这个节点里面的所有的页;
- node_start_pfn 是这个节点的起始页号;
- node_spanned_pages 是这个节点中包含不连续的物理内存地址的页面数;
- node_present_pages 是真正可用的物理页面的数目。
区域
数据结构 zone
页
struct page:组成物理内存的基本单位
- 匿名页(Anonymous Page):用一整页的内存,或者直接和虚拟地址空间建立映射关系。
- 仅需分配小块内存。
页的分配
小内存的分配
使用 slub 分配器进行分配
分配缓存块的时候,要分两种路径,快速通道 fast path 和 普通通道 slow path。
页面换出
页面只有在被使用的时候,才会放在物理内存中。如果过了一段时间不被使用,即便用户进程并没有释放它,物理内存管理也有责任做一定的干预。
内存管理系统应该主动去做,内核线程 kswapd 在系统初始化的时候就被创建,会进入一个无限循环,直到系统停止。在这个循环中,如果内存使用没有那么紧张,那它就可以放心睡大觉;如果内存紧张了,就需要去检查一下内存,看看是否需要换出一些内存页。